<?php

class Layout
{
	public static function inserir($layout, $arquivoMiniatura, $arquivoCss) {
		if (Layout::validar($layout, $arquivoCss)) {
			$arquivoDestino	=	'curso-' . canonizar($layout) . '.css';
			$strQuery	=	'INSERT INTO layouts VALUES(default, "' . $layout . '", "' . $arquivoDestino . '");';
			if (BancoDados::query($strQuery)) {
				if (move_uploaded_file($arquivoCss['tmp_name'], constant('__CAMINHO_LAYOUT__') . $arquivoDestino)) {
					$diretorioImagens	=	constant('CAMINHO_SITE') . 'imagens/layouts/' . canonizar($layout);
					if (mkdir($diretorioImagens)) {
						$extensao		=	end(explode('.', $arquivoMiniatura['name']));
						move_uploaded_file($arquivoMiniatura['tmp_name'], $diretorioImagens . '/miniatura.' . $extensao);
						redimensionaImagem($diretorioImagens . '/miniatura.' . $extensao, $diretorioImagens . '/miniatura.jpg', 200, 150, 100);
					}
					return true;
				}
				else {
					//TODO Usar LOCK TABLES?
					$strQuery	=	'DELETE FROM layouts WHERE nome = "' . $layout . '" AND arquivo = "' . $arquivoDestino . '";';
					BancoDados::query($strQuery);
					return false;
				}
			}
			else {
				return false;
			}
		}
		else {
			return false;
		}
	}
	
	public static function validar($layout, $arquivo) {
		$validou	=	true;
		
		if (!validaAlfaNumerico($layout, constant('__TAM_NOME_LAYOUT__'))) {
			$validou	=	false;
			adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_NOME_LAYOUT'), 'erro');
		}
		
		if ($arquivo['name'] != '') {
			$extensao	=	end(explode('.', $arquivo['name']));
			
			if ($extensao != 'css' && $extensao != 'CSS') {
				$validou	=	false;
				adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_TIPO_ARQUIVO_LAYOUT'), 'erro');
			}
		}
		else {
			$validou	=	false;
			adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_ARQUIVO_LAYOUT'), 'erro');
		}
		
		return $validou;
	}
	
	public static function apagar($idLayout) {
		$strQuery	=	'SELECT * FROM layouts WHERE idLayout = ' . $idLayout . ';';
		if (is_array($resultado = BancoDados::query($strQuery))) {
			$nome		=	$resultado[0]['nome'];
			$arquivo	=	$resultado[0]['arquivo'];
			$strQuery	=	'DELETE FROM layouts WHERE idLayout = ' . $idLayout . ';';
			if (BancoDados::query($strQuery)) {
				unlink(constant('__CAMINHO_LAYOUT__') . 'curso-' . canonizar($nome) . '.css');
				$diretorioImagens	=	constant('CAMINHO_SITE') . 'imagens/layouts/' . canonizar($nome);
				
				$dir = dir($diretorioImagens); 
				while($arquivo = $dir->read()) { 
					if ($arquivo != "." && $arquivo != "..") { 
						unlink($diretorioImagens . '/' . $arquivo); 
					} 
				} 
				$dir->close(); 
				
				rmdir($diretorioImagens);
				return true;
			}
			else {
				return false;
			}
		}
		else {
			return false;
		}
	}
	
	/**
	 * Retorna os Layouts Disponiveis
	 * @return unknown_type
	 */
	public static function buscar($idLayout = NULL, $ordenacaoAtual = NULL, $ordemAtual = NULL, $resultadosPagina = NULL, $paginaAtual = NULL) {
		$strQuery	=	"SELECT layouts.*, COUNT(cursos.idCurso) as qtdCursos FROM layouts LEFT JOIN cursos ON layouts.idLayout = cursos.idLayout ";
		$strQuery	.=	$idLayout != NULL ? "WHERE layouts.idLayout = " . $idLayout . " " : "";
		$strQuery	.=	"GROUP BY idLayout";
		
		$strQueryCount	=	'SELECT COUNT(*) AS qtdResultados FROM (' . $strQuery . ') AS queryOriginal;';
		
		$resultadoCount	=	BancoDados::query($strQueryCount);
		if(is_array($resultadoCount)) {
			foreach($resultadoCount as $resultado) {
				$qtdResultados	=	$resultado['qtdResultados'];
			}
			
			if ($qtdResultados > 0) {
				$paginaAtual	=	$paginaAtual == NULL ? 1 : $paginaAtual;
				$ordenacaoAtual	=	$ordenacaoAtual == NULL ? 'nome' : $ordenacaoAtual;
				$ordemAtual		=	$ordemAtual == NULL ? 'ASC' : ($ordemAtual == 'desc' ? 'DESC' : 'ASC');
				
				$strQuery	.=	' ORDER BY ' . $ordenacaoAtual . ' ' . $ordemAtual;
				
				if ($resultadosPagina != NULL) {
					$qtdPaginas		=	ceil($qtdResultados / $resultadosPagina);
					$qtdPaginas		=	$qtdPaginas == 0 ? 1 : $qtdPaginas;
					
					$strQuery		.=	' LIMIT ' . $resultadosPagina . ' OFFSET ' . (($paginaAtual - 1) * $resultadosPagina);
				}
				else {
					$qtdPaginas	=	1;
				}
				
				$strQuery	.=	';';
				
				$resultado	=	BancoDados::query($strQuery);
				
				if (is_array($resultado)) {
					return array ('listaResultados' => $resultado, 'qtdResultadosTotal' => $qtdResultados, 'qtdPaginas' => $qtdPaginas);
				}
				else {
					return false;
				}
			}
			else {
				return array('listaResultados' => array(), 'qtdResultadosTotal' => 0, 'qtdPaginas' => 0);
			}
		}
		else {
			return false;
		}
	}
}

?>